package com.common.utils;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.common.StarAppConst;
import com.starappallcommon.R;


/**
 * jay音频资源配置 播放类
 * 
 * <br>Created 2014年10月11日 上午11:50:01
 * @version  
 * @author   yefl		
 *
 * @see
 */
public class JayAudioRes {
    /** 同时最大播放音频个数,为1是做成覆盖方式 */
    private final static int MAX_STREAMS = 1;
    /** 音频播放质量 */
    private final static int SRC_QUALITY = 5;
    /** 优先级 */
    private final static int PRIORITY = 1;
    /** 加载失败 */
    private final static int LOAD_FAIL = 0;
    //返回值说明
    /** 类未初始化 */
    public final static int JAR_INIT = -1;
    /** 加载成功 */
    public final static int JAR_OK = 0;
    /** 加载失败 */
    public final static int JAR_FAIL = -2;
    /** 文件加载完毕 */
    protected static final int SOUND_LOAD_OK = 0x520;
    /** 上下文，为全局上下文 */
    private static Context mContext;
    /** 声音播放类 */
    private static SoundPool mSndPool = null;
    /** handle*/
    private static Handler mHandler = null;
    //预防多线中子线程首先调用的情况
    static {
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case SOUND_LOAD_OK:
                    Log.d("fly", "JayAudioRes play");
                    if( mSndPool != null ) {
                        mSndPool.play(msg.arg1, 1, 1, 0, 0, 1);
                    }
                    break;
                default:
                    break;
                }
            }
        };
    }
    
    /**
     * 类初始化
     * 
     * <br>Created 2014年10月13日 下午3:30:54
     * @param context 上下文
     * @author        :  yefl
     */
    public static void init(Context context) {
        Log.d("fly", "JayAudioRes init");
        mContext = context;
        mSndPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_MUSIC, SRC_QUALITY);
        mSndPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                Message msg = mHandler.obtainMessage(SOUND_LOAD_OK);
                msg.arg1 = sampleId ;       
                mHandler.sendMessage(msg);
            }
        });
    } 
    
    /**
     * 全局资源释放
     * 
     * <br>Created 2014年10月13日 下午7:51:29
     * @author        :  yefl
     */
    public static void unInit() {
        Log.d("fly", "JayAudioRes unInit");
        mContext = null;
        if (mSndPool != null) {
            mSndPool.release();
            mSndPool = null;
        }
    } 
    
    
    /**
     * 广场模块音效播放接口
     * 
     * <br>Created 2014年10月13日 下午5:35:08
     * @return        返回值：JAR_OK(0) 加载成功, 
     *                      JAR_FAIL(1) 加载失败,
     *                      JAR_INIT(-1) 需要重新调用初始化init()接口
     * @author        :  yefl
     */
    public static int playSquareAudio() {
        Log.d("fly", "JayAudioRes playSquareAudio");
        if (mContext == null) {
            return JAR_INIT;
        }
        int nSndId = mSndPool.load(mContext, R.raw.jar_001, PRIORITY);
        if (nSndId == LOAD_FAIL) {
            return JAR_FAIL;
        }
        return JAR_OK;
    }
    
    /**
     * 养成模块音效播放接口
     * 
     * <br>Created 2014年10月13日 下午5:34:27
     * @param nDevelopType 养成类型
     * @param nSex         性别
     * @param isFirst      是否首次,true表示首次
     * @return        返回值：JAR_OK(0) 加载成功, 
     *                      JAR_FAIL(1) 加载失败,
     *                      JAR_INIT(-1) 需要重新调用初始化init()接口
     * @author        :  yefl
     */
    public static int playDevelopAudio(int nDevelopType, int nSex, boolean isFirst) {
        Log.d("fly", "JayAudioRes playDevelopAudio nDevelopType=" + nDevelopType + ", nSex=" + nSex);
        if (mContext == null) {
            return JAR_INIT;
        }
        int nResID = 0;
        switch (nDevelopType) {
        case StarAppConst.JarDevelopType.TYPE_WEALTH_INCREASE:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_011_boy;
            } else {
                nResID = R.raw.jar_011_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_LEVEL_INCREASE:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_012_boy;
            } else {
                nResID = R.raw.jar_012_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_HONOR_INCREASE:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_013_boy;
            } else {
                nResID = R.raw.jar_013_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_TITLES_GET_FIRST:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_014_boy;
            } else {
                nResID = R.raw.jar_014_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_TITLES_GETTING:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_015_boy;
            } else {
                nResID = R.raw.jar_015_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_TITLES_GET:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_016_boy;
            } else {
                nResID = R.raw.jar_016_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_ARTICLE_COLLECT:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_017_boy;
            } else {
                nResID = R.raw.jar_017_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_CERTIFIED_ACHIEVEMENT:
            if (nSex == StarAppConst.JarSexType.TYPE_MALE) {
                nResID = R.raw.jar_018_boy;
            } else {
                nResID = R.raw.jar_018_girl;
            }
            break;
        case StarAppConst.JarDevelopType.TYPE_BIRTHDAY_WISHES:
            nResID = R.raw.jar_019;
            break;

        default:
            return JAR_FAIL;
        }
        int nSndId = mSndPool.load(mContext, nResID, PRIORITY);
        if (nSndId == LOAD_FAIL) {
            return JAR_FAIL;
        }
        return JAR_OK;
    }

    /**
     * 聊天模块音效播放接口
     * 
     * <br>Created 2014年10月13日 下午5:31:35
     * @param nChatType   聊天模块用的类型
     * @return        返回值：JAR_OK(0) 加载成功, 
     *                      JAR_FAIL(1) 加载失败,
     *                      JAR_INIT(-1) 需要重新调用初始化init()接口
     * @author        :  yefl
     */
    public static int playChatAudio(int nChatType) {
        Log.d("fly", "JayAudioRes playChatAudio nChatType=" + nChatType);
        if (mContext == null) {
            return JAR_INIT;
        }
        int nResID = 0;
        switch (nChatType) {
        case StarAppConst.JarChatType.TYPE_MAJOR_FESTIVALS:
            nResID = R.raw.jar_020;
            break;
        case StarAppConst.JarChatType.TYPE_FIRST_ENTERED:
            nResID = R.raw.jar_021;
            break;
        default:
            return JAR_FAIL;
        }
        int nSndId = mSndPool.load(mContext, nResID, PRIORITY);
        if (nSndId == LOAD_FAIL) {
            return JAR_FAIL;
        }
        return JAR_OK;
    }
}